// gulp 构建过程核心工作原理
const fs = require('fs')

exports.readWrite = () => {
  // 文件读取流
  const readStream = fs.createReadStream('normallize.css')
  // 文件写入流
  const writeStream = fs.createWriteStream('normallize.min.css')
  // 将读取流导入写入流，此时文件已被复制
  readStream.pipe(writeStream)

  return readStream
}


// 上文只是完成了文件的复制，可通过 stream 的 Treansform 类型创建文件转换流对象
const { Transform } = require('stream')

exports.default = () => {
  // 文件读取流
  const readStream = fs.createReadStream('normallize.css')
  // 文件写入流
  const writeStream = fs.createWriteStream('normallize.min.css')
  // 文件转换流
  const transform = new Transform({
    /**
     * 核心构建流程
     * @param {*} chunk 读取流中读到的内容（Buffer），由于读出来是字节数组，因此需要使用 toString 的方式将其转换为字符串
     * @param {*} encoding 
     * @param {*} callback 
     */
    transform: (chunk, encoding, callback) => {
      // 拿到文本内容
      const input = chunk.toString()
      // 替换空白字符 & css 注释
      const output = input.replace(/\s+/g, '').replace(/\/\*.+?\*\//g, '')
      // callback 是错误优先的函数，第一参数是错误对象，没有错误则传 null
      // output 会作为转换完的结果往后导出
      callback(null, output)
    }
  })
  // 将读取到的文件流先 pipe 到转换流，再 pipe 到写入流
  readStream
    .pipe(transform) // 转换
    .pipe(writeStream) // 写入

  return readStream
}
